# TCP

# TCP的概念
# TCP（Transmission Control Protocol，传输控制协议）是一种面向连接的、可靠的、基于字节流的传输层通信协议。
# TCP协议提供可靠的服务。通过TCP协议，网络应用可以建立可靠的连接，通过流水线方式传输数据，并且保证数据不丢失、不重复、按序到达。
# TCP协议是一种端到端的协议，它规定了数据如何在网络中传输，以及数据如何在连接的两端进行确认。


# TCP协议的特点：
# 面向连接：TCP协议是面向连接的协议，意味着通信双方必须先建立连接，然后才能进行数据传输。
# 可靠性：TCP协议提供可靠的服务，通过流水线方式传输数据，并且保证数据不丢失、不重复、按序到达。
# 基于字节流：TCP协议是基于字节流的协议，意味着TCP协议不对应用层数据进行分割，而是一次性传输整个数据。
# 超时重传：TCP协议实现了超时重传，意味着如果在规定的时间内没有收到确认报文，则会重发数据。
# 窗口大小：TCP协议实现了窗口大小的功能，通过窗口大小，可以控制通信双方发送数据的速度。
# 校验和：TCP协议实现了校验和，通过校验和可以检测数据是否被篡改。
# 状态维护：TCP协议维护了连接的状态信息，包括序列号、确认号、窗口大小等。
# 快速打开：TCP协议实现了快速打开，通过快速打开，可以加快握手的速度。
# 安全性：TCP协议提供安全性，通过加密算法，可以保证数据在传输过程中不被窃听、篡改。

# TCP协议的端口号
# TCP协议的端口号用于标识不同的服务，常见的端口号如下：
# 20/21：FTP
# 22：SSH
# 23：Telnet
# 25：SMTP
# 53：DNS
# 80：HTTP
# 110：POP3
# 143：IMAP
# 443：HTTPS
# 3389：远程桌面

# TCP协议的流程
# TCP协议的通信流程如下：
# 1. 建立连接：首先，客户端和服务器必须建立连接，在连接建立的过程中，客户端和服务器都必须完成三次握手。
# 2. 数据传输：在连接建立之后，客户端和服务器就可以开始数据传输。
# 3. 断开连接：当数据传输完成之后，连接就要断开。断开连接的过程需要四次挥手。

# TCP协议的实现
# TCP协议的实现主要依赖于操作系统提供的套接字接口。
# 操作系统提供的套接字接口包括：
# 1. socket()：创建套接字
# 2. bind()：绑定本地地址和端口
# 3. listen()：监听连接
# 4. accept()：接收连接请求
# 5. connect()：发起连接请求
# 6. recv()：接收数据
# 7. send()：发送数据
# 8. close()：关闭套接字

# 实现TCP服务器的步骤
# 1. 创建套接字
# 2. 绑定本地地址和端口
# 3. 监听连接
# 4. 接收连接请求
# 5. 接收数据
# 6. 发送数据
# 7. 关闭套接字

# 以下是实现TCP服务器的Python代码：

import socket

# 创建套接字
# socket.AF_INET：表示使用IPv4协议
# socket.SOCK_STREAM：表示使用TCP协议
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 绑定本地地址和端口
s.bind(('127.0.0.1', 8080))

# 监听连接
# 5表示可以同时等待的最大连接数
s.listen(5)
print('服务已启动，等待连接...')

# 接收连接请求
client, addr = s.accept()

# 接收数据
data = client.recv(1024)
print(addr)
print("接收到客户端的数据：", data.decode('utf-8'))

# 发送字节数据
client.send('fuck you!'.encode('utf-8'))

# 关闭套接字
client.close()
s.close()